//给定一个字符串，你需要反转字符串中每个单词的字符顺序，同时仍保留空格和单词的初始顺序。 
//
// 
//
// 示例： 
//
// 输入："Let's take LeetCode contest"
//输出："s'teL ekat edoCteeL tsetnoc"
// 
//
// 
//
// 提示： 
//
// 
// 在字符串中，每个单词由单个空格分隔，并且字符串中不会有任何额外的空格。 
// 
// Related Topics 字符串 
// 👍 238 👎 0


package com.yun.leetcode.editor.cn;

public class ReverseWordsInAStringIii {
    public static void main(String[] args) {
        Solution solution = new ReverseWordsInAStringIii().new Solution();
        System.out.println(solution.reverseWords("Let's take LeetCode contest"));
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public String reverseWords(String s) {
            int prevIndex = 0;
            int endIndex = 0;
            int curIndex = 0;
            char[] chs = s.toCharArray();
            while (curIndex <= chs.length) {
                if (curIndex == chs.length || chs[curIndex] == ' ') {
                    // reverse word
                    while (prevIndex < endIndex - 1) {
                        char tmp = chs[prevIndex];
                        chs[prevIndex] = chs[endIndex-1];
                        chs[endIndex-1] = tmp;

                        endIndex--;
                        prevIndex++;
                    }

                    endIndex = curIndex;
                    prevIndex = curIndex + 1;
                }
                if (curIndex == chs.length) {
                    break;
                }
                endIndex++;
                curIndex++;

            }
            return String.valueOf(chs);
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}